package com.browsesoft.baseadapter;

import java.util.Hashtable;
import java.util.LinkedList;

import org.w3c.dom.Element;

import com.aote.component.InvalidDataException;
import com.browsesoft.ExtendElement;
import com.browsesoft.dbtools.DBTools;
import com.browsesoft.htmlcomponent.HTMLDBFormModel;

/**
 * DBFormModel,字段内容不能相同
 */
public class HTMLDBFormModelAdapter extends HTMLDBFormModel {
	/**
	 * 构造
	 */
	public HTMLDBFormModelAdapter() {
		super();
	}

	/**
	 * 带notsame标记的元素的name属性
	 */
	private String name = null;

	/**
	 * 带notsame标记的元素的value属性
	 */
	private String value = null;

	/**
	 * 页面上传递的参数parentid
	 */
	private String parentid = "null";

	/**
	 * 得到有notsame标记元素的属性
	 * 
	 * @return name属性
	 */
	public String getAttribute() {
		// 得到有notsame="notsame"标记的元素
		LinkedList ls = ExtendElement.findElements(this.component.getElement(),
				"notsame", "notsame");
		// 如果有
		if (ls.size() > 0) {
			Element e = (Element) ls.get(0);
			// 给name赋值
			name = e.getAttribute("name");
		}
		return name;
	}

	/**
	 * 更新属性
	 * 
	 * @param ht
	 *            存储属性的哈息表
	 * @throws Exception
	 */
	public void updateAttributes(Hashtable ht) throws Exception {
		// 属性name的值
		name = this.getAttribute();
		// 属性value的值
		value = (String) ht.get(name);
		// sql语句
		String sql = "select * from " + this.tableName + " where " + name
				+ "='" + value + "'";
		// 二维数组
		String[][] result = new String[0][1];
		// 如果value不为空
		if (value != null) {
			// 如果parentid='null'
			if (parentid != null && parentid.equals("null")) {
				// 得到与name属性和processid属性相同的二维数组
				result = DBTools.executeQueryWithTableHead(sql
						+ " and processid='" + parentid + "'");
			}
			// 否则
			else {
				// 得到与name属性相同的二维数组
				result = DBTools.executeQueryWithTableHead(sql);
			}
			// 如果长度大于0
			if (result.length > 1) {
				// 抛出无效数据异常，提示用户记录重复
				throw new InvalidDataException("记录已存在,请重新输入!");
			}
			super.updateAttributes(ht);
			// 自动刷新
			this.component.getPage().close(
					"opener.document.forms[0].submit();window.close();");
		}
	}
}